-- @name BOSS狩猎模块
-- @version 1.0.0
-- @description 全自动BOSS击杀与计时系统
-- @require modules/movement.lua
-- @require modules/combat.lua

local logger = require("utils.logger")
local ConfigLoader = require("config.loader")
local Settings = require("config.settings")
local config = ConfigLoader.load(Settings.CURRENT_GAME)
local movement = require("modules.movement")
local combat = require("modules.combat")
local tslib = require("TSLib")
local baidu_ocr = require("utils.baidu_ocr")
local StateManager = require("utils.state_manager")
local map = require("modules.map")
local contract = require("tasks.contract_map")


-- 定义BOSS图标检测函数
local function detect_boss_icon(boss_points)
    -- 多点比色参数需实际调试
    return isColor(boss_points)
end

local function main()
    local map_queue = {}
    local map_status = {}

    -- 初始化地图队列
    for map_name in pairs(config.BOSS_MAPS) do
        table.insert(map_queue, map_name)
    end

    while true do
        -- 每小时08分重置状态
        if tonumber(os.date("%M")) == 8 then
            StateManager.resetHourlyState()
        end

        -- 获取当前小时状态
        local hourly_state = StateManager.getHourlyState()

        -- 如果当前小时已执行过BOSS任务时，调用承包地图
        if not hourly_state.shouldExecute then
            contract.run()
            mSleep(config.BOSS.CHECK_INTERVAL)
            break
        end

        for i = 1, #map_queue do
            local map_name = map_queue[i]
            local map_cfg = config.BOSS_MAPS[map_name]

            -- OCR验证当前地图
            -- 使用enterMapByPoint进入地图
            if map.enterMapByPoint(map_name, map_cfg.LEVEL1, map_cfg.LEVEL2) then
                -- 进图前状态重置
                map_status[map_name] = {
                    last_kill = os.time(),
                    boss_found = false,
                    boss_killed = false
                }
                logger.info("成功进入地图：" .. map_name)

                -- 打开地图
                map.openMap()
                mSleep(1000)

                -- 点击BOSS位置
                if map_cfg.BOSS_POSITION then
                    tap(map_cfg.BOSS_POSITION[1], map_cfg.BOSS_POSITION[2])
                    logger.info("已点击BOSS位置")
                end

                -- 等待到达BOSS位置
                mSleep(map_cfg.MOVE_DURATION or 5000)

                -- 关闭地图
                map.closeMap()
                mSleep(500)

                -- 开始自动攻击
                combat.startAutoAttack()
                logger.info("已开始自动攻击")
            else
                logger.warn("进入地图失败")
                -- 跳出本次循环，进入下一张图
                goto continue_map
            end

            -- 检测BOSS是否已死亡
            local boss_dead = false
            local check_count = 0
            local max_checks = 120 -- 5秒*120=10分钟超时

            -- 初始检测BOSS是否已死亡
            if not detect_boss_icon() then
                logger.info("进入地图时BOSS已死亡")
                boss_dead = true
            end

            -- 循环检测BOSS状态
            while not boss_dead and check_count < max_checks do
                map.openMap()
                mSleep(1000)
                -- 每5秒检测一次
                check_count = check_count + 1
                if not detect_boss_icon() then
                    boss_dead = true
                    logger.info("BOSS已死亡")
                     -- 关闭地图
                    map.closeMap()
                    mSleep(1000)
                end
            end

            -- 标记地图状态
            if boss_dead then
                map_status[map_name].boss_killed = true
                map_status[map_name].last_kill = os.time()
                StateManager.LastBossExecution = os.time()
                logger.info(map_name .. " BOSS已击杀")
            else
                logger.warn(map_name .. " BOSS检测超时")
            end

            -- 返回主城
            movement.useTownStone()
            mSleep(2000)
            ::continue_map::
        end

        -- 队列循环检测

        mSleep(config.BOSS.CHECK_INTERVAL)
    end
end

return {
    run = main
}
